package org.giovanolli.mumi.controller.business;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.giovanolli.mumi.controller.AbstractModel;
import org.giovanolli.mumi.entities.Address;
import org.giovanolli.mumi.entities.City;
import org.giovanolli.mumi.entities.DocumentType;

/**
 * The Class SpecialistModel.
 * 
 * @param <T>
 *            the generic type
 */
public abstract class PersonModel<T> extends AbstractModel<T> {

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 5111544950890768359L;

	/** Specialist attributes. */

	/** The last name. */
	private String lastName;

	/** The first name. */
	private String firstName;

	/** The birth date. */
	private Date birthDate;

	/** The document type. */
	private DocumentType documentType;

	/** The document number. */
	private String documentNumber;

	/** The address. */
	private Address address;

	/** The selectable cities. */
	private List<City> selectableCities;

	/** The email. */
	private String email;

	/**
	 * Gets the address.
	 * 
	 * @return the address
	 */
	public Address getAddress() {
		return address;
	}

	/**
	 * Gets the birth date.
	 * 
	 * @return the birth date
	 */
	public Date getBirthDate() {
		return birthDate;
	}

	/**
	 * Gets the document number.
	 * 
	 * @return the document number
	 */
	public String getDocumentNumber() {
		return documentNumber;
	}

	/**
	 * Gets the document type.
	 * 
	 * @return the document type
	 */
	public DocumentType getDocumentType() {
		return documentType;
	}

	/**
	 * Gets the email.
	 * 
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * Gets the first name.
	 * 
	 * @return the first name
	 */
	public String getFirstName() {
		return firstName;
	}

	/**
	 * Gets the last name.
	 * 
	 * @return the last name
	 */
	public String getLastName() {
		return lastName;
	}

	/**
	 * Gets the selectable cities.
	 * 
	 * @return the selectable cities
	 */
	public List<City> getSelectableCities() {
		return selectableCities;
	}

	/**
	 * Gets the selectable document types.
	 * 
	 * @return the selectable document types
	 */
	public List<DocumentType> getSelectableDocumentTypes() {
		return Arrays.asList(DocumentType.values());
	}

	/**
	 * Sets the address.
	 * 
	 * @param address
	 *            the new address
	 */
	public void setAddress(Address address) {
		this.address = address;
	}

	/**
	 * Sets the birth date.
	 * 
	 * @param birthDate
	 *            the new birth date
	 */
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}

	/**
	 * Sets the document number.
	 * 
	 * @param documentNumber
	 *            the new document number
	 */
	public void setDocumentNumber(String documentNumber) {
		this.documentNumber = documentNumber;
	}

	/**
	 * Sets the document type.
	 * 
	 * @param documentType
	 *            the new document type
	 */
	public void setDocumentType(DocumentType documentType) {
		this.documentType = documentType;
	}

	/**
	 * Sets the email.
	 * 
	 * @param email
	 *            the new email
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * Sets the first name.
	 * 
	 * @param firstName
	 *            the new first name
	 */
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	/**
	 * Sets the last name.
	 * 
	 * @param lastName
	 *            the new last name
	 */
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	/**
	 * Sets the selectable cities.
	 * 
	 * @param selectableCities
	 *            the new selectable cities
	 */
	public void setSelectableCities(List<City> selectableCities) {
		this.selectableCities = selectableCities;
	}
}
